﻿using System;
//6.2日期和时间
//DateTime、DateTimeOffset和TimeSpan
//6.2.1 TimeSpan
//TimeSpan表示一段时间间隔或者是一天内的时间。对于后者，它就是一个“时钟”时间（不包括日期），它等同于从半夜12点开始到现在的时间（假设没有夏时制）。
//TimeSpan的最小单位为100纳秒，最大值为1千万天，可以为正数或负数。

//创建TimeSpan的方法有三种：
//    通过其中一个构造方法
//    通过调用其中一个静态的From...方法
//    通过两个DateTime相减得到

/*

//以下是构造方法：
public TimeSpan (int hours, int minutes, int seconds);
public TimeSpan(int days, int hours, int minutes, int seconds);
public TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds);
public TimeSpan(long ticks); // Eachtick = 100ns

 */

/*

//如果希望指定一个单位的时间间隔，如分钟、小时等，那么静态的From...方法更方便：
public static TimeSpan FromDays(double value);
public static TimeSpan FromHours(double value);
public static TimeSpan FromMinutes(double value);
public static TimeSpan FromSeconds(double value);
public static TimeSpan FromMilliseconds(double value);

*/
namespace _157_日期和时间
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(new TimeSpan(2, 30, 0)); // 02:30:00
            Console.WriteLine(TimeSpan.FromHours(2.5)); // 02:30:00
            Console.WriteLine(TimeSpan.FromHours(-2.5)); // -02:30:00

            //TimeSpan 重载了<、>、+和-操作符。

            //以下表达式可以得到一个表示2.5小时的TimeSpan：
            //TimeSpan.FromHours(2) + TimeSpan.FromMinutes(30);

            //以下表达式则表示10天减去1秒的时间：
            //TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1); // 9.23:59:59

            //使用这个表达式，我们能够表示整数的Days、Hours、Minutes、Seconds和Millisecond：
            TimeSpan nearlyTenDays = TimeSpan.FromDays(10) - TimeSpan.FromSeconds(1);
            Console.WriteLine(nearlyTenDays.Days); // 9
            Console.WriteLine(nearlyTenDays.Hours); // 23
            Console.WriteLine(nearlyTenDays.Minutes); // 59
            Console.WriteLine(nearlyTenDays.Seconds); // 59
            Console.WriteLine(nearlyTenDays.Milliseconds); // 0

            //相反，Total...属性则返回表示整个时间跨度double类型值：
            Console.WriteLine(nearlyTenDays.TotalDays);      // 9.99998842592593
            Console.WriteLine(nearlyTenDays.TotalHours);     // 239.999722222222
            Console.WriteLine(nearlyTenDays.TotalMinutes);   // 14399.9833333333
            Console.WriteLine(nearlyTenDays.TotalSeconds);   // 863999
            Console.WriteLine(nearlyTenDays.TotalMilliseconds); // 863999000

            //静态的Parse方法则执行与ToString相反的操作，它能将一个字符串转换为一个TimeSpan。
            //TryParse执行与ToString相同的操作，但是当转换失败时，它会返回false，而不是抛出异常。
            //XmlConvert类也提供了符合标准XML格式化协议的TimeSpan字符串转换方法。

            //TimeSpan的默认值是TimeSpan.Zero。

            //TimeSpan也可用于表示一天内时间（从半夜12点开始经过的时间）。要获得当前的时间，我们可以调用DateTime.Now.TimeOfDay。
            Console.ReadKey();
        }
    }
}
